##==================================================================================================
##  EVE - Expressive Vector Engine
##  Copyright : EVE Project Contributors
##  SPDX-License-Identifier: BSL-1.0
##==================================================================================================

##==================================================================================================
## Setup aggregation of tests
##==================================================================================================
add_custom_target(bench.core.exe)

##==================================================================================================
## Elementwise function bench tests
##==================================================================================================
make_all_benchs(ROOT bench.core NAME abs                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME add                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME average               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME binarize              TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME binarize_not          TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bitofsign             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_and               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_andnot            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_cast              TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_ceil              TYPES ${uint_or_real_types})
make_all_benchs(ROOT bench.core NAME bit_floor             TYPES ${uint_or_real_types})
make_all_benchs(ROOT bench.core NAME bit_mask              TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_not               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_notand            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_notor             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_or                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_ornot             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_select            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_shl               TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME bit_shr               TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME bit_xor               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME bit_width             TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME cbrt                  TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME ceil                  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME clamp                 TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME convert               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME copysign              TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME countl_one            TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME countl_zero           TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME countr_one            TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME countr_zero           TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME dec                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME dist                  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME div                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME epsilon               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME exponent              TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME extract               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME fdim                  TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME firstbitset           TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME firstbitunset         TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME floor                 TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME fma                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME fms                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME fnma                  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME fnms                  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME frac                  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME frexp                 TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME gcd                   TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME has_single_bit        TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME hi                    TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME horn                  TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME horn1                 TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME hypot                 TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME if_else               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME ifrexp                TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME inc                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_denormal           TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_equal              TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_eqz                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_even               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_finite             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_flint              TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME is_greater            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_greater_equal      TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_gtz                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_imag               TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME is_infinite           TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_less               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_less_equal         TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_lessgreater        TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_lez                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_nan                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_negative           TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_nez                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_ngtz               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_nlez               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_normal             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_denormal       TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_equal          TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_finite         TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_greater        TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_greater_equal  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_imag           TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME is_not_infinite       TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_less           TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_less_equal     TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_nan            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_not_real           TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME is_odd                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_ordered            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_positive           TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME is_pow2               TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME is_real               TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME is_unordered          TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME lcm                   TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME ldexp                 TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME lerp                  TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME lo                    TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME logical_not           TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME lohi                  TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME lookup                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME manhattan             TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME mantissa              TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME max                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME min                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME minus                 TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME modf                  TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME mul                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME count_true            TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME nb_values             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME nearest               TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME negate                TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME negatenz              TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME nextafter             TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME oneminus              TYPES ${signed_types}  )
make_all_benchs(ROOT bench.core NAME plus                  TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME popcount              TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME rec                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME reduce                TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME reduce_fast           TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME reduce_large          TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME reduce_medium         TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME rem                   TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME rotl                  TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME rotr                  TYPES ${uint_types}    )
make_all_benchs(ROOT bench.core NAME round                 TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME rsqrt                 TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME saturate              TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME shl                   TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME shr                   TYPES ${integral_types})
make_all_benchs(ROOT bench.core NAME sqr                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME sqr_abs               TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME sqrt                  TYPES ${real_types}    )
make_all_benchs(ROOT bench.core NAME sub                   TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME trunc                 TYPES ${all_types}     )
make_all_benchs(ROOT bench.core NAME ulpdist               TYPES ${all_types}     )
